package javaDemo.jvm.day_01_01_ClassLoader;

/**
 * @Description ClassLoader 学习
 * @Author
 * @Date 2020/11/8 21:48
 * @Version 1.0
 */
public class MyObject {

    /**
     * 1、双亲委派机制：
     *    1)、使用类加载器加载 .class 文件时，总是以 BootstrapClassLoader --> ExtClassLoader --> AppClassLoader 的顺序去加载；
     *    2)、任意一个类加载器找到对应 class 加载完成后，后面的加载器就不再加载对应的 class 类了；
     * 2、沙箱机制：由于双亲委派机制，造成了沙箱机制
     *    1)、因为每次类加载都是 Java 自带的类优先加载，所以保证了类加载的统一性；
     *    2)、减少了自定义代码对 Java 原生类的污染，提高了安全性；
     * @param args
     */
    public static void main(String[] args) {
        Object o = new Object();
        System.out.println(o.getClass().getClassLoader());  // BootstrapClassLoader --> null

        System.out.println("==============================");
        MyObject myObject = new MyObject();
        System.out.println(myObject.getClass().getClassLoader().getParent().getParent());   // BootstrapClassLoader --> null
        System.out.println(myObject.getClass().getClassLoader().getParent());   // ExtClassLoader --> sun.misc.Launcher$ExtClassLoader@1b6d3586
        System.out.println(myObject.getClass().getClassLoader());   // AppClassLoader --> sun.misc.Launcher$AppClassLoader@18b4aac2
    }
}
